/**
 * 处理主题样式
 * @param theme - 主题颜色（十六进制格式）
 */
export function handleThemeStyle(theme: string): void {
    document.documentElement.style.setProperty('--el-color-primary', theme);
    for (let i = 1; i <= 9; i++) {
      document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, getLightColor(theme, i / 10));
    }
    for (let i = 1; i <= 9; i++) {
      document.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, getDarkColor(theme, i / 10));
    }
  }
  
  /**
   * 十六进制颜色转 RGB 颜色
   * @param hex - 十六进制颜色值（例如 #FF5733）
   * @returns 返回一个包含 R, G, B 值的数组
   */
  export function hexToRgb(hex: string): [number, number, number] {
    hex = hex.replace('#', '');
    const hexs = hex.match(/../g) as string[];
    for (let i = 0; i < 3; i++) {
      hexs[i] = parseInt(hexs[i], 16).toString();
    }
    return [parseInt(hexs[0]), parseInt(hexs[1]), parseInt(hexs[2])];
  }
  
  /**
   * RGB 颜色转十六进制颜色
   * @param r - 红色分量（0-255）
   * @param g - 绿色分量（0-255）
   * @param b - 蓝色分量（0-255）
   * @returns 返回十六进制颜色值（例如 #FF5733）
   */
  export function rgbToHex(r: number, g: number, b: number): string {
    const hexs = [r.toString(16), g.toString(16), b.toString(16)];
    for (let i = 0; i < 3; i++) {
      if (hexs[i].length === 1) {
        hexs[i] = `0${hexs[i]}`;
      }
    }
    return `#${hexs.join('')}`;
  }
  
  /**
   * 变浅颜色值
   * @param color - 十六进制颜色值（例如 #FF5733）
   * @param level - 变浅的程度（0-1 之间的浮点数）
   * @returns 返回变浅后的十六进制颜色值
   */
  export function getLightColor(color: string, level: number): string {
    let [r, g, b] = hexToRgb(color);
    for (let i = 0; i < 3; i++) {
      [r, g, b][i] = Math.floor((255 - [r, g, b][i]) * level + [r, g, b][i]);
    }
    return rgbToHex(r, g, b);
  }
  
  /**
   * 变深颜色值
   * @param color - 十六进制颜色值（例如 #FF5733）
   * @param level - 变深的程度（0-1 之间的浮点数）
   * @returns 返回变深后的十六进制颜色值
   */
  export function getDarkColor(color: string, level: number): string {
    let [r, g, b] = hexToRgb(color);
    for (let i = 0; i < 3; i++) {
      [r, g, b][i] = Math.floor([r, g, b][i] * (1 - level));
    }
    return rgbToHex(r, g, b);
  }